package com.quanyan.travel.service;

import com.quanyan.api.APIResponse;
import com.quanyan.common.Plugin.PageObj;
import com.quanyan.travel.api.req.*;
import com.quanyan.travel.api.resp.RespOrderDetails;
import com.quanyan.travel.api.resp.RespProductMsg;
import com.quanyan.travel.api.resp.RespWebActivityDetail;
import com.quanyan.travel.entity.*;
import com.quanyan.travel.entity.vo.*;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * User: zyq
 * Date: 2016/6/2 0002
 * Time: 9:58
 */

public interface TravelAdminService {
    /**
     * 查询banner图
     * @return
     */
    APIResponse<List<Banner>> allBanner();

    /**
     * 删除banner图
     * @param id
     * @return
     */
    APIResponse<Integer> deleteBanner(Integer id);

    /**
     * 新增banner图
     * @param banner
     * @return
     */
    APIResponse<Integer> addBanner(Banner banner);

    /**
     * 新增banner图 —— 查询活动(未过期，报名未截止，名额未满，活动未开始)
     */
    APIResponse<Banner> selectActivityForBanner(String activityName);

    /**
     * banner图设置优先级
     */
    APIResponse setBannerPriority(ReqBannerPriorityList priorityList);

    /**
     * 编辑banner图
     */
    APIResponse editBanner(Banner banner);


    /**
     * 已经推荐的活动数量
     */
    APIResponse<Integer> selectRecommendNum();

    /**
     * 所有目的地列表
     * @return
     */

    APIResponse<PageObj<List<Destination>>>  allDestinations(ReqAllDestination request);

    /**
     * 所有玩法列表
     * @return
     */
    APIResponse<List<Category>> allCategories();

    /**
     * 所有玩法列表
     * @return
     */
    APIResponse<?> createMaster(ReqMaster reqMaster);

    /**
     * 活动特性
     * @return
     */
    APIResponse<?> activityMsg();

    /**
     *
     * @return
     */
    APIResponse<?> createDestination(ReqDestination reqDestination);

    /**
     * 查询领队用户
     * @return
     */
    APIResponse<PageObj<List<MasterUser>>> getMasterUser(ReqMasterList reqMasterList);

    /**
     * 根据电话号码,检索用户
     * @return
     */
    APIResponse getUserByMobile(String mobile);

    /**
     * 领队创建
     * @return
     */
    APIResponse createMasterUser(ReqCreateMasterUser reqCreateMasterUser);

    /**
     * 修改领队
     */
    APIResponse updateMasterUser(MasterUser masterUser);

    /**
     * 领队删除
     * @return
     */
    APIResponse delMasterUser(Integer masterId);

    /**
     * 创建活动
     * @param reqCreateActivity
     * @return
     */
    APIResponse<Integer> createActivity(ReqCreateActivity reqCreateActivity);


    /**
     * 保存活动
     * @param reqCreateActivity
     * @return
     */
    TbOutdoorActivity saveActivity(ReqCreateActivity reqCreateActivity);

    /**
     * 创建场次
     * @param req
     * @return
     */
    APIResponse<?> createProduct(ReqCreateProduct req);

    /**
     * 查询活动
     * @return
     */
    APIResponse<PageObj<List<ActivityList>>> getActivityList(ReqActivityList req);

    /**
     * 查询该活动是否已推荐
     *
     * 0:未推荐 1:已推荐
     */
    Byte isRecommend(Integer activityId);


    /**
     * 只能添加未开始的活动
     *
     * @return
     */
    APIResponse<RespProductMsg> getProductListByActivityId(Integer activityId);


    /**
     * 关闭过期非季度活动
     * @return
     */
    void refreshTravelActivityStatus();


    /**
     * 关闭过期季度活动
     * @return
     */
    void refreshTravelThemeActivityStatus();

    /**
     * 获取可用场次,匹配到活动下
     *
     *
     * @return
     */
    List<ProductDetail> queryUsableProductDetail(ReqUsableProduct reqUseableProduct);
    /**
     * 目的修改
     *
     * @return
     */

    void updateDestination(TbOutdoorDestination tbOutdoorDestination);

    /**
     * 玩法插入
     * @return
     */
    void insertOutdoorCategory(TbOutdoorCategory tbOutdoorCategory);
    /**
     * 玩法修改
     * @return
     */
    void updateOutdoorCategory(TbOutdoorCategory tbOutdoorCategory);
    /**
     * 活动下架,未报名开始的活动才能下架
     *
     * @return
     */
    APIResponse activityUndercarriage(Integer activityId);
    /**
     * 活动编辑
     *
     * @return
     */
    APIResponse updateActivity(ReqCreateActivity createActivity);
    /**
     * 活动下场次展示
     *
     * @return
     */
    APIResponse getProductList(Integer activityId);

    /**
     * 活动详情
     *
     * @return
     */
    APIResponse<RespWebActivityDetail> activityDetail(Integer activityId);

    /**
     *
     * @return
     */
    APIResponse<List<TbCity>> queryAllCity();

    /**
     * 更新最低价格
     */
    void updateLowPrice();

    /**
     * 检测处于支付中的订单 ,提醒用户
     */
    void remindUserPay();

    /**
     * 订单列表展示
     */
    APIResponse<PageObj<List<VOrderActivityExt>>> travelOrderList(ReqOrderList request);

    APIResponse<RespOrderDetails> travelOrderDetail(String orderNo);

    APIResponse clearCache();

}

